package com.redstars.generate.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.redstars.generate.config.GenDataSource;
import com.redstars.generate.entity.SysDatasource;
import com.redstars.generate.page.PageResult;
import com.redstars.generate.result.Result;
import com.redstars.generate.vo.SysDatasourceVo;
import com.redstars.generate.query.SysDatasourceQuery;
import com.redstars.generate.vo.SysTableVo;

import java.util.List;

/**
 * 数据源管理
 *
 * @author zhouhx 
 * @since 1.0.0 2022-10-05
 */
public interface SysDatasourceService extends IService<SysDatasource> {
    /**
    *
    * @description 分页查询
    * @author zhouhx 
    * @since 1.0.0 2022-10-05
    */
    PageResult<SysDatasourceVo> page(SysDatasourceQuery query);
    /**
    *
    * @description 新增
    * @author zhouhx 
    * @since 1.0.0 2022-10-05
    */
    void save(SysDatasourceVo vo);
    /**
    *
    * @description 修改
    * @author zhouhx 
    * @since 1.0.0 2022-10-05
    */
    void update(SysDatasourceVo vo);
    /**
    *
    * @description 删除
    * @author zhouhx 
    * @since 1.0.0 2022-10-05
    */
    void delete(List<Long> idList);
    /**
    *
    * @description 详情
    * @author zhouhx 
    * @since 1.0.0 2022-10-05
    */
    SysDatasourceVo detail(Long id);

    /**
     *
     * @description 测试连接
     * @author zhouhx
     * @since 1.0.0 2022-10-05
     */
    Result<String> test(Long id);

    /**
     *
     * @description 查询所有数据
     * @author zhouhx
     * @since 1.0.0 2022-10-05
     */
    List<SysDatasourceVo> list(SysDatasourceQuery query);

    /**
     *
     * @description 根据数据源id查询所有数据表
     * @author zhouhx
     * @since 1.0.0 2022-10-05
     */
    Result<List<SysTableVo>> tableList(Long id);

    /**
     * 获取数据库产品名，如：MySQL
     *
     * @param datasourceId 数据源ID
     * @return 返回产品名
     */
    String getDatabaseProductName(Long datasourceId);

    /**
     * 根据数据源ID，获取数据源
     *
     * @param datasourceId 数据源ID
     */
    GenDataSource get(Long datasourceId);

    /**
     *
     * @description 根据数据源id,表名查询所搜索的表
     * @author zhouhx
     * @since 1.0.0 2022-10-05
     */
    Result<List<SysTableVo>> tableList(Long id,String tableName);
}